/*
 * DoktorDenetci.java
 */
package eDoktor;

import eDoktor.doktor.Doktor;
import eDoktor.hasta.Hasta;
import eDoktor.hasta.Vaka;
import eDoktor.hastalik.Belirti;
import eDoktor.hastalikGrubu.Cevap;
import eDoktor.hastalikGrubu.Soru;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

@ManagedBean(name = "DoktorDenetci")
@SessionScoped

/**
 * Doktor denetçi sınıfı
 * Bu sınıf doktor ile ilgili arayüz işlemlerinin gerçekleşmesini sağlar.
 * @author Onuralp
 */
public class DoktorDenetci implements Serializable {
    private String kullaniciAdi;
    private String sifre;
    private String girisMesaji;
    private Doktor doktor;
    private Hasta hasta;
    private Vaka vaka;
    private String eskiSifre;
    private String yeniSifre;
    private String yeniSifreYeniden;

    /**
     * DoktorDenetci sınıfının yapılandırıcısı
     */
    public DoktorDenetci() {
        kullaniciAdi = "";
        sifre = "";
        girisMesaji = "";
        doktor = new Doktor();
        hasta = new Hasta();
        vaka = new Vaka();
        eskiSifre = "";
        yeniSifre = "";
        yeniSifreYeniden = "";
    }

    /**
     * DoktorDenetci sınıfının degiskenlerine erişmeyi sağlayan fonksiyonlar 
     */
    
    public Doktor getDoktor() {
        return doktor;
    }

    public void setDoktor(Doktor doktor) {
        this.doktor = doktor;
    }

    public String getGirisMesaji() {
        return girisMesaji;
    }

    public void setGirisMesaji(String girisMesaji) {
        this.girisMesaji = girisMesaji;
    }

    public String getKullaniciAdi() {
        return kullaniciAdi;
    }

    public void setKullaniciAdi(String kullaniciAdi) {
        this.kullaniciAdi = kullaniciAdi;
    }

    public String getSifre() {
        return sifre;
    }

    public void setSifre(String sifre) {
        this.sifre = sifre;
    }

    public Hasta getHasta() {
        return hasta;
    }

    public void setHasta(Hasta hasta) {
        this.hasta = hasta;
    }

    public Vaka getVaka() {
        return vaka;
    }

    public void setVaka(Vaka vaka) {
        this.vaka = vaka;
    }

    public String getEskiSifre() {
        return eskiSifre;
    }

    public void setEskiSifre(String eskiSifre) {
        this.eskiSifre = eskiSifre;
    }

    public String getYeniSifre() {
        return yeniSifre;
    }

    public void setYeniSifre(String yeniSifre) {
        this.yeniSifre = yeniSifre;
    }

    public String getYeniSifreYeniden() {
        return yeniSifreYeniden;
    }

    public void setYeniSifreYeniden(String yeniSifreYeniden) {
        this.yeniSifreYeniden = yeniSifreYeniden;
    }
    
    /**
     * Oturumu aç. 
     * @param actionEvent Oturum aç
     */
    public void oturumuAc(ActionEvent actionEvent) {  
        FacesMessage mesaj = null;
        boolean onay = false;
        try {
            VeriTabaniSurucusu veriTabaniSurucusu = VeriTabaniSurucusu.ornekOlustur();
            veriTabaniSurucusu.baglantiyiKur();
            if ((veriTabaniSurucusu.kullaniciBilgileriniAra(doktor, kullaniciAdi, sifre)) && (doktor.getKullaniciTuru().equals("Doktor"))) {
                onay = true;
            }
            if ((!kullaniciAdi.equals("")) && (!sifre.equals("")) && onay) {
                veriTabaniSurucusu.doktorAra(doktor);
                girisMesaji = doktor.girisMesaji();
                FacesContext.getCurrentInstance().getExternalContext().redirect("Doktor.xhtml");
            } 
            else {  
                mesaj = new FacesMessage(FacesMessage.SEVERITY_WARN, "Kullanıcı adı ve/veya parola yanlış", "");  
            }
            veriTabaniSurucusu.baglantiyiKes();
        } catch (Exception hata) {
            System.out.println("Hata(Exception): " + hata.getMessage());
        }
        FacesContext.getCurrentInstance().addMessage(null, mesaj);  
    } 
    
    /**
     * Oturumu kapat.
     * @param actionEvent Oturumu kapat
     */
    public void oturumuKapat(ActionEvent actionEvent) {
        kullaniciAdi = "";
        sifre = ""; 
        girisMesaji = "";
        eskiSifre = "";
        yeniSifre =  "";
        yeniSifreYeniden = "";
        doktor = new Doktor();
        hasta = new Hasta();
        vaka = new Vaka();
        try {
            FacesContext.getCurrentInstance().getExternalContext().redirect("DoktorGiris.xhtml");
        } catch (IOException hata) {
            System.out.println("Hata(IOException): " + hata.getMessage());
        }
    }
    
    /**
     * Vakayı görüntüle.
     * @param actionEvent Görüntüle
     */
    public void vakayiGoruntule(ActionEvent actionEvent) {
        FacesMessage mesaj = null;
        try {
            VeriTabaniSurucusu veriTabaniSurucusu = VeriTabaniSurucusu.ornekOlustur();
            veriTabaniSurucusu.baglantiyiKur();
            hasta = veriTabaniSurucusu.hastaAra(hasta.getKisiselBilgiler().getTcKimlikNo());
            vaka = veriTabaniSurucusu.vakaAra(hasta, vaka.getNo());
            veriTabaniSurucusu.hastaOykusuAra(vaka);
            if ((!hasta.getKisiselBilgiler().getAdi().equals("")) && (!vaka.getHastaOykusu().getSorular().isEmpty())) {  
                FacesContext.getCurrentInstance().getExternalContext().redirect("DoktorVakaIncele.xhtml");
            } 
            else {  
                mesaj = new FacesMessage(FacesMessage.SEVERITY_WARN, "T.C. Kimlik No ve/veya vaka numarası yanlış", "");  
            }
            veriTabaniSurucusu.baglantiyiKes();
        } catch (Exception hata) {
            System.out.println("Hata(Exception): " + hata.getMessage());
        }
        FacesContext.getCurrentInstance().addMessage(null, mesaj);
    }
    
    /**
     * Hastalağı görüntüle.
     * @param actionEvent Görüntüle
     */
    public void hastaligiGoruntule(ActionEvent actionEvent) {
        try {
            FacesContext.getCurrentInstance().getExternalContext().redirect("DoktorVakaDanisma.xhtml");
        } catch (IOException hata) {
            System.out.println("Hata(IOException): " + hata.getMessage());
        }
    }
    
    /**
     * Teşhisi onayla.
     * @param actionEvent Onaylama 
     */
    public void teshisiOnayla(ActionEvent actionEvent){  
        FacesMessage mesaj = null;
        try {
            VeriTabaniSurucusu veriTabaniSurucusu = VeriTabaniSurucusu.ornekOlustur();
            veriTabaniSurucusu.baglantiyiKur();
            Map<Integer, Integer> belirtiSoruIliskisi = new HashMap<Integer, Integer>();
            for (Belirti belirti : vaka.getHastalik().getBelirtiler()) {
                belirtiSoruIliskisi.put(belirti.getNo(), veriTabaniSurucusu.soruAra(vaka.getHastalik(), belirti));
            }
            veriTabaniSurucusu.baglantiyiKes();
            Map<String, String> belirtiCevapIliskisi = new HashMap<String, String>();
            String kayit = "";
            for (Soru soru : vaka.getHastaOykusu().getSorular()) {
                if (belirtiSoruIliskisi.containsValue(soru.getNo())) {
                    belirtiCevapIliskisi.put(Integer.toString(soru.getBelirti().getNo()), soru.getCevap().getTanim());
                    kayit += soru.getCevap().getTanim() + "\t"; 
                }
            }
            belirtiCevapIliskisi.put("X", "Evet");
            kayit += "Evet\n";
            String dosya = "C:\\Veriler\\" + vaka.getHastalik().getTanim() + ".txt";
            boolean ekle = true; 
            FileWriter cikti = new FileWriter(dosya,ekle);
            cikti.write(kayit);
            cikti.close();
            mesaj = new FacesMessage(FacesMessage.SEVERITY_INFO, kayit,  "");
        } catch (Exception hata) {
            System.out.println("Hata(Exception): " + hata.getMessage());
        }
        FacesContext.getCurrentInstance().addMessage(null, mesaj);  
    }  
    
    /**
     * Teşhisi reddet.
     * @param actionEvent Onaylama 
     */
    public void teshisiReddet(ActionEvent actionEvent){  
        FacesMessage mesaj = null;
        try {
            VeriTabaniSurucusu veriTabaniSurucusu = VeriTabaniSurucusu.ornekOlustur();
            veriTabaniSurucusu.baglantiyiKur();
            Map<Integer, Integer> belirtiSoruIliskisi = new HashMap<Integer, Integer>();
            for (Belirti belirti : vaka.getHastalik().getBelirtiler()) {
                belirtiSoruIliskisi.put(belirti.getNo(), veriTabaniSurucusu.soruAra(vaka.getHastalik(), belirti));
            }
            veriTabaniSurucusu.baglantiyiKes();
            Map<String, String> belirtiCevapIliskisi = new HashMap<String, String>();
            String kayit = "";
            for (Soru soru : vaka.getHastaOykusu().getSorular()) {
                if (belirtiSoruIliskisi.containsValue(soru.getNo())) {
                    belirtiCevapIliskisi.put(Integer.toString(soru.getBelirti().getNo()), soru.getCevap().getTanim());
                    kayit += soru.getCevap().getTanim() + "\t"; 
                }
            }
            belirtiCevapIliskisi.put("X", "Hayır");
            kayit += "Hayır\n";
            String dosya = "C:\\Veriler\\" + vaka.getHastalik().getTanim() + ".txt";
            boolean ekle = true; 
            FileWriter cikti = new FileWriter(dosya,ekle);
            cikti.write(kayit);
            cikti.close();
            mesaj = new FacesMessage(FacesMessage.SEVERITY_INFO, kayit,  "");
        } catch (Exception hata) {
            System.out.println("Hata(Exception): " + hata.getMessage());
        }
        FacesContext.getCurrentInstance().addMessage(null, mesaj); 
    } 
    
    /**
     * Şifreyi değiştir.
     * @param actionEvent Güncelle 
     */
    public void sifreyiDegistir(ActionEvent actionEvent) {
        FacesMessage mesaj = null;
        if(sifre.equals(eskiSifre)){
            if(yeniSifre.equals(yeniSifreYeniden)){
                doktor.setSifre(yeniSifre);
                try {
                    VeriTabaniSurucusu veriTabaniSurucusu = VeriTabaniSurucusu.ornekOlustur();
                    veriTabaniSurucusu.baglantiyiKur();
                    veriTabaniSurucusu.kullaniciBilgileriGuncelle(doktor);
                    veriTabaniSurucusu.baglantiyiKes();
                    mesaj = new FacesMessage(FacesMessage.SEVERITY_WARN, "Şifreniz başarı ile değiştirildi.", "");
                } catch (Exception hata) {
                    System.out.println("Hata(Exception): " + hata.getMessage());
                }
            }
            else{
                mesaj = new FacesMessage(FacesMessage.SEVERITY_WARN, "Yeni parolalar uyuşmuyor.", "");
            }
        }
        else{
            mesaj = new FacesMessage(FacesMessage.SEVERITY_WARN, "Parola yanlış", "");
        }
        FacesContext.getCurrentInstance().addMessage(null, mesaj);  
    }
}
